package com.chengliang.bbs.util;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.time.LocalDate;

/**
 * @author: chengliang
 * @create: 2019-07-29 16:39
 */
@Component
public class FileUtils {

    @Value("${project.file.upload.path}")
    private String url="D://files//";

    @Value("${project.url}")
    private String projectUrl;

    /**
     * 保存文件返回 网络请求路径
     * @param prefixDirectory
     * @param file
     * @return
     * 按照ProjectUrl返回请求地址
     */
    public String saveFile(String prefixDirectory,MultipartFile file){
        //日期目录
        String timeDir = getTimeDir(prefixDirectory);
        //文件名
        String fileName = generatorFileName(file.getOriginalFilename());
        //文件路径
        String path = new StringBuffer().append(timeDir).append(fileName).toString();
        try {
            File f=new File(url,path);
            if(!f.getParentFile().exists()){
                f.getParentFile().mkdirs();
            }
            //保存本地路径
            file.transferTo(f);
            //网络访问路径
            return path;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 获取日期目录
     * @return
     * @param prefixDirectory
     */
    private String getTimeDir(String prefixDirectory){
        LocalDate nowTime = LocalDate.now();
        String filePath = new StringBuffer()
                .append("/").append(prefixDirectory)
                .append("/").append(nowTime.getYear())
                .append("/").append(nowTime.getMonthValue())
                .append("/").append(nowTime.getDayOfMonth())
                .append("/").toString();
        File file=new File(filePath);
        if(!file.exists()){
            file.mkdirs();
        }
        return filePath;
    }

    /**
     * 截取文件后缀 随机文件名称
     * @param fileOriginalName 文件原名
     * @return
     *  随机文件名（包含后缀）
     */
    private String generatorFileName(String fileOriginalName){
        if(StringUtil.isEmpty(fileOriginalName)){
            throw new RuntimeException("文件名未找到");
        }
        int i = fileOriginalName.lastIndexOf(".");
        //文件名后缀
        String fileNameSuffix = fileOriginalName.substring(i);
        //
        return new StringBuffer().append(System.currentTimeMillis()).append(fileNameSuffix).toString();
    }


}
